using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
namespace Entidades
{
    public class Localidad
    {
        private const string __ErrorAlta = "No se pudo dar el alta (Localidad), ";
        private const string __ErrorBaja = "No se pudo dar la baja (Localidad), ";
        private const string __ErrorModificacion = "No se pudo hacer la modificacion (Localidad), ";
        private const string __ErrorTraerUno = "No se pudo Traer Uno (Localidad), ";
        private const string __ErrorTraerTodos = "No se pudo Traer Todos (Localidad), ";
        private Int32 _Id;
        private string _localidad;
        private string _codpostal;

        private Int32 _IdPartido;
        #region "Propiedades"
        public Int32 Id
        {
            get { return _Id; }
            set { _Id = value; }
        }
        public string localidad
        {
            get { return _localidad; }
            set { _localidad = value; }
        }
        public string codpostal
        {
            get { return _codpostal; }
            set { _codpostal = value; }
        }
       
        public Int32 IdPartido
        {
            get { return _IdPartido; }
            set { _IdPartido = value; }
        }
        #endregion
        #region "Lazys"
       
        private Partido _Partido;
        public Partido Partido
        {
            get
            {
                if (_Partido == null)
                {
                    _Partido = new Partido(_IdPartido);
                }
                return _Partido;
            }
        }
        #endregion
        public Localidad()
        {
        }
        public Localidad(Int32 Id)
        {
            Localidad localidad = traerUno(Id);
            this._Id = localidad.Id;
            this._localidad = localidad.localidad;
            this._codpostal = localidad.codpostal;
            this._IdPartido = localidad.IdPartido;
        }
        #region "Metodos Publicos"
        public void Alta()
        {
            try
            {
                validaAlta();
                DALLocalidad.Alta(this);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorAlta + ex.Message);
            }
        }
        public void Baja()
        {
            try
            {
                validaBaja();
                DALLocalidad.Baja(_Id);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorBaja + ex.Message);
            }
        }
        public void Modificar()
        {
            try
            {
                validaModificacion();
                DALLocalidad.Modificar(this);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorModificacion + ex.Message);
            }
        }
        #region "Metodos Estaticos"
        private Localidad traerUno(int Id)
        {
            try
            {
                return DALLocalidad.traerUno(Id);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorTraerUno + ex.Message);
            }
        }
        public static List<Localidad> TraerTodos()
        {
            try
            {
                return DALLocalidad.TraerTodos();
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorTraerTodos + ex.Message);
            }
        }
        #region "Lazys"
       
        public static List<Localidad> getAllByIdPartido(Int32 IdPartido)
        {
            try
            {
                return DALLocalidad.getAllByIdPartido(IdPartido);
            }
            catch (Exception ex)
            {
                throw new Exception("ErrorDeLazyLoad(Localidad)" + ex.Message);
            }
        }
        #endregion
        #endregion
        #endregion
        #region "Metodos Privados"
        private void validaAlta()
        {
            //lanza excepcion si no valida
            //ej If _Descripcion = " Then Throw New Exception("la descripcion no debe estar vacia")
            throw new NotImplementedException();
        }
        private void validaBaja()
        {
            //lanza excepcion si no valida
            throw new NotImplementedException();
        }
        private void validaModificacion()
        {
            //lanza excepcion si no valida
            //ej If _Descripcion = " Then Throw New Exception("la descripcion no debe estar vacia")
            throw new NotImplementedException();
        }
        #endregion
    }
}